/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package gestionform;

import dao.exception.DAOConnectionException;
import dao.exception.DAOException;
import dao.exception.DAOPersonneException;
import dao.interfaces.DAOPersonne;
import gestionform.exception.ValidationConnexionException;
import javax.servlet.http.HttpServletRequest;
import model.Personne;

/**
 *
 * @author Paul
 */
public final class GestionConnexion extends GestionInfos {

    private DAOPersonne daoPersonne;
    public static final String ERREUR_CONNEXION = "connexion";

    public GestionConnexion(DAOPersonne daoPers) {
        this.daoPersonne = daoPers;
    }

    public Personne connexionUtilisateur(HttpServletRequest request) {
        /* Récupération des champs du formulaire */
        String login = getValeurChamp(request, CHAMP_LOGIN);
        String password = getValeurChamp(request, CHAMP_PASS);
        Personne pers = new Personne();
        try {
            traiterLogin(login, pers);
            traiterPassword(password, pers);
            if (erreurs.isEmpty()) {
                try {
                    pers = daoPersonne.rechercheUtilisateur(login, password);
                } catch (DAOPersonneException daoPersEx) {
                    setErreur(ERREUR_CONNEXION, daoPersEx.getMessage());
                } catch (DAOConnectionException daocEx) {
                    setErreur(ERREUR_CONNEXION, daocEx.getMessage());
                }
            } else {
                setErreur(ERREUR_CONNEXION, "Échec de la connexion.");
            }
        } catch (DAOException daoEx) {
            setErreur("", "Échec de la connexion : une erreur imprévue est survenue, merci de réessayer ultérieurement.");
            daoEx.printStackTrace();
        }
        return pers;
    }

    /**
     * Valide le mot de passe saisi.
     */
    private void validerPassword(String motDePasse) throws ValidationConnexionException {
        if (motDePasse != null) {
            if (motDePasse.length() < 5) {
                throw new ValidationConnexionException("Le mot de passe doit contenir au moins 5 caractères.");
            }
        } else {
            throw new ValidationConnexionException("Veuillez saisir votre mot de passe.");
        }
    }

    private void validerLogin(String login) throws ValidationConnexionException {
        if (login == null) {
            throw new ValidationConnexionException("Veuillez saisir votre login.");
        }
    }

    private void traiterLogin(String login, Personne pers) {
        try {
            validerLogin(login);
        } catch (ValidationConnexionException e) {
            setErreur(CHAMP_PASS, e.getMessage());
        }
        pers.setMdp(login);
    }

    private void traiterPassword(String password, Personne pers) {
        try {
            validerPassword(password);
        } catch (ValidationConnexionException e) {
            setErreur(CHAMP_PASS, e.getMessage());
        }
        pers.setMdp(password);
    }
}
